
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link href='/css/styles.css' rel='stylesheet' type='text/css' />
    <link href='/images/favicon.png' rel='shortcut icon' />
    <script src='/js/jquery.min.1.4.js'></script>
    <script src='/js/app.js'></script>
    <meta content='width=device-width, minimum-scale=1.0, maximum-scale=1.0' name='viewport' />
    <title>Redis中文资料站</title>
	<meta http-equiv="description" content="redis中文资料站，下载安装redis，查找redis常用命令（commands），选择适合的redis客户端方式，配置redis主从（master-slave），阅读redis官方文档，社区里了解更多redis信息，提交redis的bug。" />
  </head>
  <body class=''>
    <script src='/js/head.js'></script>
    <div class='text'>
      <article id='topic'>
        <p><strong>注意事项：</strong> Redis的虚拟机现在已经过时。再分配2.4将最新的虚拟内存（但它也提醒你，虚拟内存的使用气馁）Redis的版本。我们发现，使用虚拟机具有一些缺点和问题。在Redis的未来，我们要简单地提供最好的内存中的数据库（但作为通常持续磁盘上）永远不考虑，至少现在比RAM支持更大的数据库，。我们今后的努力都集中到提供脚本，群集和更好的持久性。</p>
        
        <h1>虚拟内存</h1>
        
        <p>Redis的虚拟内存是一个功能，将首次出现在Redis的2.0稳定Redis的分布。但是虚拟内存（称为虚拟机从现在起）已提供足够稳定Redis的可用的不稳定分支在测试 <a href="http://github.com/antirez/redis">Git</a>.</p>
        
        <h2>虚拟内存在简单的话解释</h2>
        
        <p>再分配如下的键-值模型。你有一些值关联的键。Redis的一般需要在内存中的两个键和关联值。有时候，这是不是最好的选择，而按键设计（为了确保快速查找），必须在内存中的值可以被交换到磁盘时，它们很少使用。</p>
        
        <p>具体而言，这意味着如果你有一个10键在内存中的数据集，但常常使用这个密钥只有10％，与虚拟内存启用Redis的尝试传输到磁盘上很少使用的键关联的值。</p>
        
        <p>当这些值的要求，作为一个由客户端发出的命令的结果，值装回主内存交换文件。</p>
        
        <h2>当使用虚拟记忆体是一个好主意</h2>
        
        <p>使用虚拟机之前，你应该问问自己，如果你真的需要它。再分配是一个磁盘的支持，在内存中的数据库。以正确的方式使用Redis的是，几乎总是有足够的RAM，以适应在内存中的所有数据。仍然存在的情况下这是不可能的：</p>
        
        <ul>
        <li>数据访问是非常偏颇的。只有一个按键的小百分比（例如在你的网站活跃用户），得到绝大多数的访问。在同一时间有太多每个键的数据在内存中采取一切。</li>
        <li>根本没有足够的可用内存保存在内存中的所有数据，无论数据访问模式，和值大。在此配置中Redis的键在内存作为一个磁盘上的数据块可以使用，所以键查找速度快，但实际值的访问需要访问磁盘（慢）。</li>
        </ul>
        
        <p>考虑采取的一个重要概念是，Redis的是无法交换密钥，所以如果你的内存问题有关的事实，你有太多的按键非常小的值，VM是不是解决问题的方法。</p>
        
        <p>但是，如果良好的内存量使用，因为值是相当大的（例如大型字符串，列表，集合或与许多元素哈希），然后虚拟机可以是一个好主意。
				</p>
        
        <p>有时你可以变成你的“小值的许多键”问题“几个键，但具有非常大的价值”个刚刚使用哈希以组成一个单一的关键领域的相关数据。例如，而不是为每一个对象的属性有一个关键，你有一个单一的关键，其中每个对象哈希字段代表不同的属性。</p>
        
        <h2>VM配置</h2>
        
        <p>配置虚拟机并不难，但需要一些护理，按要求设置的最佳参数。</p>
        
        <p>VM启用和通过编辑redis.conf配置，第一步是切换上：</p>
        
        <pre><code>vm-enabled yes&#x000A;</code></pre>
        
        <p>许多其他的配置选项是能够改变的虚拟机的行为。规则是你不想要运行默认配置，为每一个问题和数据集需要一些微调，以获得最大的优势。</p>
        
        <h2>vm-max-memory设置</h2>
        
        <p><code>vm-max-memory</code>设置指定多少内存Redis的是免费使用开始之前磁盘上的交换值。</p>
        
        <p>基本上，如果没有达到这个内存限制，没有对象会被交换，Redis的工作像往常一样的内存中的所有对象。一旦被击中，但此限制，有足够多的对象换出的限制下返回到内存。</p>
        
        <p>交换的对象主要是最高的“年龄”的（即秒数，因为他们没有被使用），但“交换性”的对象也是它的内存大小的对数成正比。所以，虽然旧的对象是首选，更大的对象换出时，他们首先是同年龄。</p>
        
        <p><em>警告:</em>由于键不能被换出，Redis的将无法兑现<em>vm-max-memory</em>设置，如果钥匙单独使用超过空间的限制。</p>
        
        <p>此设置最佳值是足够的RAM以保持“工作组”的数据。具体而言，只是给Redis的，你可以尽可能多的内存，并交换会更好地工作。</p>
        
        <h2>配置交换文件</h2>
        
        <p>为了传输数据从内存到磁盘，Redis的使用交换文件。交换文件与耐久性数据无关，Redis的实例终止时，可以删除。然而，不应该被移到交换文件，删除，或以其他任何方式改变Redis的运行时。</p>
        
        <p>因为Redis的交换文件，主要用于在随机访问的方式，投入固态磁盘交换文件会导致更好的性能。</p>
        
        <p>交换文件分为“页面”。A值可以换到一个或多个页面，但单页不能容纳超过一个值。</p>
        
        <p>有没有直接的方式告诉Redis的多字节交换文件，它应该使用。配置，而不​​是两个不同的值，即会产生相乘时使用的字节总数。这两个值的内页交换文件，页面大小。它是可能的配置在redis.conf的这两个参数。</p>
        
        <ul>
        <li><em>vm-pages</em>配置指令是用来设置总页数在交换文件。</li>
        <li><em>vm-page-size</em> 配置指令用于以设置页面大小，以字节为单位。</li>
        </ul>
        
        <p>例如，如果页面大小设置为32个字节的值，总页数设置为10000000（10元），然后交换文件可容纳共320 MB的数据。</p>
        
        <p>因为一个单一的页面不能被用来存放超过一个值（但可以将一个值存储到多个页面），必须小心设置这些参数。通常情况下，最好的办法是设置页面大小，使广大的值可以互换使用了几页。</p>
        
        <h2>线程的虚拟机与虚拟机拦截</h2>
        
        <p>另外一个很重要的配置参数是<em>vm-max-threads</em>:</p>
        
        <pre><code># 默认配置VM的最大线程&#x000A;vm-max-threads 4&#x000A;</code></pre>
        
        <p>这是为了用来执行的线程的最大数量的I / O /交换文件。一个良好的价值，只是为了您的系统中的核心数量相匹配。</p>
        
        <p>然而，“0”的特殊价值将使阻塞的VM。当VM配置会阻止它执行的I / O同步阻塞方式。这是什么，你可以期望阻止虚拟机：</p>
        
        <ul>
        <li>客户端访问交换了钥匙，将阻止其他客户，而从磁盘读取，使客户所经历的延迟较大，尤其是如果磁盘是缓慢或忙碌和/或是否存在磁盘上的交换大值。</li>
        <li>阻塞的虚拟机的性能更好的整体，有没有时间失去同步，线程产卵，并恢复阻塞的客户等待值。所以，如果你愿意接受较高的延迟时间，从时间，阻止虚拟机可以是一个很好的选择。特别是如果交换很少发生，你经常访问的数据恰好适合在你的记忆。</ul>
        
        <p>相反，如果你有很多掉期和互换操作，你有很多的核心，你想利用，一般当你不想处理交换价值的客户，将阻止其他客户为几毫秒（或更多如果交换的价值是非常大的），那么最好使用线程的虚拟机。</p>
        
        <p>进行实验的数据集和不同的配置热情鼓励...</p>
        
        <h1>随机的事情知道</h1>
        
        <h2>一个交换文件的好地方</h2>
        
        <p>在许多配置交换文件可能相当大，达40GB以上。并不是所有的文件系统能够处理大文件的一个好办法，特别是在Mac OS X的文件系统，这往往是真正关心它跛。</p>
        
        <p>该建议是使用Linux的ext3文件系统，或任何其他文件系统的良好支持稀疏文件。什么是稀疏文件？</p>
        
        <p>稀疏文件是在那里发生了很多的内容是空的文件。如ext2，ext3和ext4的，RaiserFS，Raiser4，以及其他许多先进的文件系统能够更有效的方式来编码这些文件将分配更多的空间的文件，在需要的时候，也就是更实际的文件块将被使用。</p>
        
        <p>交换文件，显然是相当稀疏，尤其是如果服务器正在运行一点时间以来，这是比换出的数据量更大。文件系统不支持稀疏文件可以阻止在某些时候Redis的过程中，同时创造一个非常大的文件一次。</p>
        
        <p>为支持备用文件的文件系统列表， <a href="http://en.wikipedia.org/wiki/Comparison_of_file_systems" target="_blank">检查这个检查比较不同的文件系统，这个维基页面。</a>.</p>
        
        <h2>监控虚拟机</h2>
        
        <p>一旦你有一个Redis的系统与虚拟机启用和运行，你可能会很感兴趣，知道它是如何工作的：总交换多少对象，对象交换和装载每一秒，依此类推。</p>
        
        <p>有一个实用程序，检查虚拟机如何工作的，这是非常方便的，就是部分<a href="http://github.com/antirez/redis-tools" target="_blank">Redis Tools</a>。该工具被称为再分配STAT，使用它是非常简单的：</p>
        
        <pre><code>$ ./redis-stat vmstat&#x000A;--------------- objects --------------- ------ pages ------ ----- memory -----&#x000A;load-in  swap-out  swapped   delta      used     delta      used     delta&#x000A;138837   1078936   800402    +800402    807620   +807620    209.50M  +209.50M&#x000A;4277     38011     829802    +29400     837441   +29821     206.47M  -3.03M&#x000A;3347     39508     862619    +32817     870340   +32899     202.96M  -3.51M&#x000A;4445     36943     890646    +28027     897925   +27585     199.92M  -3.04M&#x000A;10391    16902     886783    -3863      894104   -3821      200.22M  +309.56K&#x000A;8888     19507     888371    +1588      895678   +1574      200.05M  -171.81K&#x000A;8377     20082     891664    +3293      899850   +4172      200.10M  +53.55K&#x000A;9671     20210     892586    +922       899917   +67        199.82M  -285.30K&#x000A;10861    16723     887638    -4948      895003   -4914      200.13M  +312.35K&#x000A;9541     21945     890618    +2980      898004   +3001      199.94M  -197.11K&#x000A;9689     17257     888345    -2273      896405   -1599      200.27M  +337.77K&#x000A;10087    18784     886771    -1574      894577   -1828      200.36M  +91.60K&#x000A;9330     19350     887411    +640       894817   +240       200.17M  -189.72K&#x000A;</code></pre>
        
        <p>上面的输出是再分配一个虚拟机启用，内键约1万，大量的模拟负载使用再分配负载实用程序服务器。</p>
        
        <p>正如你可以看到从输出负载和交换，行动正在发生的每一秒。需要注意的是第一线的报告的实际值，因为服务器开始，而下一行是比以前阅读的差异。</p>
        
        <p>如果分配足够的内存来保存您的工作数据集，也许你应该看到很多不太引人注目的交换发生，所以再分配STAT可以是一个非常宝贵的工具，以了解如果您需要购买内存;)</p>
        
        <h2>与VM功能的再分配：更好的RDB文件或追加只有文件？</h2>
        
        <p>当VM被启用，保存和加载数据库 操作慢得多。一个DB，通常在2秒钟内加载虚拟机启用13秒，如果服务器被配置为使用尽可能最小的内存（也就是虚拟机的最大内存设置为0）。</p>
        
        <p>所以，你可能想切换到使用只有文件的持久性的附加配置，使可以执行BGREWRITEAOF，不时。</p>
        
        <p>重要的是要注意，而BGSAVE或BGREWRITEAOF的进展Redis的是并没有交换磁盘上的新的价值观。VM将是只读的，同时还有另外一个孩子访问。所以如果你有大量的写入，而有一个孩子的工作，内存使用量可能会增长。</p>
        
        <h2>使用尽可能少的内存</h2>
        
        <p>一个有趣的设置与磁盘上的数据块在内存中的公正键变成Redis的VM的最大内存设置为0。如果你不介意一些延迟和性能较差，但要使用非常小的内存非常大的价值，这是一个很好的设置。</p>
        
        <p>在此设置中，你应该首先尝试设置为虚拟机（VM最大线程0）阻止这个配置和高流量交换在数量和交换业务将是巨大的，线程会消耗大量资源相比一个简单的拦截实施。</p>
        
        <h2>虚拟机的稳定性</h2>
        
        <p>虚拟机仍然是实验性的代码，但它在过去几个星期在开发环境中的许多方面进行了测试，甚至在一些生产环境。在此测试期间没有错误被发现。仍然比较模糊的错误可能发生在非受控环境，那里有设置，我们无法重现出于某种原因。</p>
        
        <p>在这个阶段中，我们鼓励您尝试在您的开发环境中的VM，即使在生产中，如果你的数据库是不是关键任务，但举例来说只是一个大的持续高速缓存的数据可能没有太多的问题。</p>
        
        <p>请报告任何问题，你会发现Redis的谷歌集团或加入freenode上的＃再分配IRC频道，由IRC。</p>
      </article>
    </div>
    <div class='text' id='comments'>
      <div id='disqus_thread'></div>
      <script type='text/javascript'>
        //<![CDATA[
          var disqus_shortname = 'rediscn';
          
          /* * * DON'T EDIT BELOW THIS LINE * * */
          (function() {
            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
              dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
              (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
          })();
        //]]>
      </script>
      <a class='dsq-brlink' href='http://disqus.com'>
        Comments powered by
        <span class='logo-disqus'>
          Disqus
        </span>
      </a>
    </div>
    <script src='/js/foot.js'></script>
  </body>
</html>
